#ifndef __THREAD_POOL__
#define __THREAD_POOL__
#include "tidArr.h"
#include "taskQueue.h"
#include <stdio.h>
#include <sys/epoll.h>
#include <unistd.h>
typedef struct threadPool_s{
    //子线程信息
    tidArr_t tidArr;    
    //任务队列
    taskQueue_t taskQueue;
    //锁
    pthread_mutex_t mutex;
    //条件变量
    pthread_cond_t cond;
    //退出标志
    int exitflag;
}threadPool_t;
//线程tcp  ip和端口的初始化
int tcpInit(int* sockfd,char* ip,char* port);
//创建子线程
int makeWorker(threadPool_t* pthreadPool);
//接收规则
int recvn(int netfd,void* pstart,int len);
//处理任务
int del(int netfd);
//任务队列,线程,锁,条件变量 --初始化
int threadPoolInit(threadPool_t* pthreadPool,int workNum);
//添加一个监听
int epollAdd(int epfd, int fd);
//删除一个监听
int epollDel(int epfd,int fd);
// 检查命令行参数数量是否符合预期
#define ARGS_CHECK(argc, expected)\
    do { \
        if ((argc) != (expected)) { \
            fprintf(stderr, "args num error!\n"); \
            exit(1); \
        } \
    } while (0)

// 检查返回值是否是错误标记,若是则打印msg和错误信息
#define ERROR_CHECK(ret, error_flag, msg) \
    do { \
        if ((ret) == (error_flag)) { \
            perror(msg); \
            exit(1); \
        } \
    } while (0)

#endif

